package test;

import java.sql.SQLException;
import java.util.List;
import modele.*;
import modele.exceptions.EtudiantInexistantException;
import modele.exceptions.FormationInexistanteException;
import modele.exceptions.IntervenantInexistantException;
import modele.exceptions.MaitreDeStageInexistantException;
import modele.exceptions.MatiereInexistanteException;
import modele.exceptions.MembreAdministrationInexistantException;
import modele.exceptions.PasDeMaitreDeStageException;
import modele.exceptions.PasDeTuteurException;



/**
 * Class test contenant un main pour tester le modèle en l'absence de tests unitaires
 */
public class test {
    public static void main(String args[]) throws PasDeTuteurException, MatiereInexistanteException, EtudiantInexistantException, SQLException, IntervenantInexistantException, FormationInexistanteException, MaitreDeStageInexistantException, PasDeMaitreDeStageException, MembreAdministrationInexistantException
    {
        //System.out.println(MaitreDeStage.getMaitresDeStage("2010/2011", 3));

        //Test de Annee, Formation

        System.out.println("Afficher une formation");
        System.out.println(Formation.getFormation(1));
        
        //Test de Etudiant
        System.out.println("Afficher la liste des étudiants par année et par formation");
        List<Annee> la = Annee.getToutesLesAnnees();
        List<Formation> lf = Formation.getToutesLesFormations();

        for(Annee a : la)
        {
            System.out.println(a);
            for(Formation f : lf)
            {
                System.out.println(f);
                List<Etudiant> le = Etudiant.getEtudiants(a.getNom(), f.getId());

                for(Etudiant e : le)
                    System.out.println(e);

            }

        }

        System.out.println("Afficher les étudiants d'un tuteur d'une année et d'une formation");
        List<Etudiant> etu = Etudiant.getEtudiants("2010/2011", 1, Intervenant.class, 1);
        for(Etudiant e : etu)
            System.out.println(e);

        System.out.println("Afficher les étudiants d'un maitre de stage d'une année et d'une formation");
        List<Etudiant> etue = Etudiant.getEtudiants("2010/2011", 1, MaitreDeStage.class, 1);
        for(Etudiant e : etue)
            System.out.println(e);

        System.out.println("Afficher un étudiant");
        System.out.println(Etudiant.getEtudiant(3118));

        System.out.println("Afficher un étudiant dont on a le login et mdp");
        //System.out.println(Etudiant.getEtudiant("danicel", "dani"));

        System.out.println("Affecter un maitre de stage à un étudiant");
        MaitreDeStage ms = MaitreDeStage.getMaitreDeStage(1);
        Etudiant.getEtudiant(3119).affecterMaitreDeStage(ms);

        //Test de Intervenant

        System.out.println("Tous les intervenants");
        System.out.println(Intervenant.getTousLesIntervenants());

        System.out.println("Afficher un intervenant");
        System.out.println(Intervenant.getIntervenant(53));

        System.out.println("Afficher un intervenant dont on a le login et mdp");
        //System.out.println(Intervenant.getIntervenant("michel", "plasse"));

        System.out.println("Afficher la liste des matières d'un intervenant");
        System.out.println(Intervenant.getMatieres(1));

        System.out.println("Afficher les tuteurs par année et par formation");
        for(Annee a : la)
        {
            System.out.println(a);
            for(Formation f : lf)
            {
                System.out.println(f);
                List<Intervenant> li = Intervenant.getTuteurs(a.getNom(), f.getId());

                for(Intervenant i : li)
                    System.out.println(i);

            }

        }

        //Test de MaitreDeStage

        System.out.println("Afficher les maitres de stage par année et par formation");
        for(Annee a : la)
        {
            System.out.println(a);
            for(Formation f : lf)
            {
                System.out.println(f);
                List<MaitreDeStage> lm = MaitreDeStage.getMaitresDeStage(a.getNom(), f.getId());

                for(MaitreDeStage m : lm)
                    System.out.println(m);

            }

        }

        System.out.println("Afficher tous les maitres de stage");
        System.out.println(MaitreDeStage.getTousLesMaitresDeStage());

        System.out.println("Afficher un maitre de stage");
        System.out.println(MaitreDeStage.getMaitreDeStage(1));

        System.out.println("Afficher un maitre de stage par son login et mdp");
        //System.out.println(MaitreDeStage.getMaitreDeStage("jeand", "dupond"));

        //Créer un maitre de stage
        //MaitreDeStage.enregistrerNouveauMaitreDeStage("test", "test", "adr", "tel", "test", "test", "test", "test");
        
        //Modifier un maitre de stage
        //MaitreDeStage.getMaitreDeStage(2).MAJMaitre("supertest", "supertest", "superadr", "supermail", "supertel", "superlogin", "superpassword", "supernomentrep");

        //Test de Matiere

        System.out.println("Afficher toutes les matières");
        System.out.println(Matiere.getToutesLesMatieres());

        System.out.println("Afficher une matière");
        System.out.println(Matiere.getMatiere(2));

        System.out.println("Afficher les retours sur une matière");
        List<RetourSurMatiere> rsm = Matiere.getRetours(7);
        for(RetourSurMatiere rr : rsm)
            System.out.println(rr);

        //Test de MembreAdministration

        System.out.println("Afficher un admin");
        //System.out.println(MembreAdministration.getAdmin("gnaho", "gnaho"));

        //Test de RetourSurEtudiant

        System.out.println("Editer et afficher le retour d'un tuteur sur son étudiant");
        Retour r = Etudiant.getEtudiant(3118).getRetourTuteur();
        r.setTexte("efforts nécessaires");
        System.out.println(r);
        
        Etudiant e = Etudiant.getEtudiant(3119);
        (e.getRetourTuteur()).setTexte("c'est bien");

        System.out.println("Editer le retour d'un maitre de stage sur son étudiant");
        Retour rrr = Etudiant.getEtudiant(3119).getRetourMaitreDeStage();
        rrr.setTexte("bon travail");

        System.out.println("Editer le retour de l'admin sur l'étudiant");
        Retour ra = Etudiant.getEtudiant(3118).getRetourAdmin();
        ra.setTexte("passez me voir");

        //Test de RetourSurMatiere

        System.out.println("Editer et afficher un retour sur matière");
        Retour rs = Etudiant.getEtudiant(3118).getRetour(7);
        rs.setTexte("j'adore");
        System.out.println(rs);

    }

}
